﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sinacor.UI.Bovespa.Corretagem.Communication;
using Sinacor.Infra.UI.Common;
using Sinacor.UI.Bovespa.Corretagem.Communication.Bovespa.Corretagem.FormadorMercado;
using Sinacor.UI.Bovespa.Corretagem.Model.Parameter;

namespace Sinacor.UI.Bovespa.Corretagem.Communication.Translator.ModelToDataContract
{
    public class FormadorMercado
    {
        public FiltroFormadorMercadoRequest ToFiltroFormadorMercado(Model.Parameter.FiltroFormadorMercado parameter)
        {
            FiltroFormadorMercadoRequest result = null;
            if (parameter == null)
                return null;
            else
            {
                result = new FiltroFormadorMercadoRequest();
                result.ApelidoCliente = parameter.ApelidoCliente;
                result.Ativo = parameter.Ativo;
                result.CodigoCliente = parameter.CodigoCliente;
                result.DataFinal = parameter.DataFinal;
                result.DataInicial = parameter.DataInicial;
                result.PercentualDesconto = parameter.PercentualDesconto;
                result.Isin = parameter.Isin;
                if (parameter.TipoMercado.HasValue)
                {
                    switch (parameter.TipoMercado.Value)
                    {
                        case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.Vista:
                            result.TipoMercado = TipoMercado.Vista; break;
                        case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.OpcaoCompra:
                            result.TipoMercado = TipoMercado.OpcaoCompra; break;
                        case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.OpcaoVenda:
                            result.TipoMercado = TipoMercado.OpcaoVenda; break;
                        case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.ExercicioOpcaoCompra:
                            result.TipoMercado = TipoMercado.ExercicioOpcaoCompra; break;
                        case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.ExercicioOpcaoVenda:
                            result.TipoMercado = TipoMercado.ExercicioOpcaoVenda; break;
                        case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.Fracionario:
                            result.TipoMercado = TipoMercado.Fracionario; break;
                        case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.Estruturado:
                            result.TipoMercado = TipoMercado.Estruturado; break;
                        case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.Leilao:
                            result.TipoMercado = TipoMercado.Leilao; break;
                        case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.Termo:
                            result.TipoMercado = TipoMercado.Termo; break;
                        case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.LeilaoNaoCotados:
                            result.TipoMercado = TipoMercado.LeilaoNaoCotados; break;
                        case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.Futuro:
                            result.TipoMercado = TipoMercado.Futuro; break;
                        case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.VencimentoFuturo:
                            result.TipoMercado = TipoMercado.VencimentoFuturo; break;
                        case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.BOX:
                            result.TipoMercado = TipoMercado.BOX; break;
                        default: break;
                    }
                }
            }

            return result;

        }

        public List<FiltroFormadorMercadoRequest> ToFiltroFormadorMercado(ModelCollection<Model.Parameter.FiltroFormadorMercado> requestList)
        {
            List<FiltroFormadorMercadoRequest> resultList = null;
            if (requestList != null)
            {
                resultList = new List<FiltroFormadorMercadoRequest>();
                foreach (FiltroFormadorMercado entity in requestList)
                {
                    resultList.Add(ToFiltroFormadorMercado(entity));
                }
            }
            return resultList;
        }

        public Sinacor.UI.Bovespa.Corretagem.Communication.Bovespa.Corretagem.FormadorMercado.FormadorMercadoRequest ToFormadorMercado(Model.FormadorMercado request)
        {

            Sinacor.UI.Bovespa.Corretagem.Communication.Bovespa.Corretagem.FormadorMercado.FormadorMercadoRequest result = null;
            if (request == null)
                return null;
            else
            {
                result = new FormadorMercadoRequest();
                result.ApelidoCliente = request.ApelidoCliente;
                result.Ativo = request.Ativo;
                result.CodigoCliente = request.CodigoCliente;
                result.DataFinal = request.DataFinal;
                result.DataInicial = request.DataInicial;
                result.PercentualDesconto = request.PercentualDesconto;
                result.Isin = request.Isin;

                switch (request.TipoMercado.Value)
                {
                    case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.Vista:
                        result.TipoMercado = TipoMercado.Vista; break;
                    case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.OpcaoCompra:
                        result.TipoMercado = TipoMercado.OpcaoCompra; break;
                    case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.OpcaoVenda:
                        result.TipoMercado = TipoMercado.OpcaoVenda; break;
                    case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.ExercicioOpcaoCompra:
                        result.TipoMercado = TipoMercado.ExercicioOpcaoCompra; break;
                    case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.ExercicioOpcaoVenda:
                        result.TipoMercado = TipoMercado.ExercicioOpcaoVenda; break;
                    case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.Fracionario:
                        result.TipoMercado = TipoMercado.Fracionario; break;
                    case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.Estruturado:
                        result.TipoMercado = TipoMercado.Estruturado; break;
                    case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.Leilao:
                        result.TipoMercado = TipoMercado.Leilao; break;
                    case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.Termo:
                        result.TipoMercado = TipoMercado.Termo; break;
                    case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.LeilaoNaoCotados:
                        result.TipoMercado = TipoMercado.LeilaoNaoCotados; break;
                    case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.Futuro:
                        result.TipoMercado = TipoMercado.Futuro; break;
                    case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.VencimentoFuturo:
                        result.TipoMercado = TipoMercado.VencimentoFuturo; break;
                    case Sinacor.UI.Bovespa.Corretagem.Model.Enum.TipoMercado.BOX:
                        result.TipoMercado = TipoMercado.BOX; break;
                    default: break;
                }
            }

            return result;
        }

        public List<FormadorMercadoRequest> ToFormadorMercado(ModelCollection<Model.FormadorMercado> requestList)
        {
            List<FormadorMercadoRequest> resultList = null;
            if (requestList != null)
            {
                resultList = new List<FormadorMercadoRequest>();
                foreach (Model.FormadorMercado entity in requestList)
                {
                    resultList.Add(ToFormadorMercado(entity));
                }
            }
            return resultList;
        }
    }
}